home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 December / PCWorld_2004-12_cd.bin / software / temacd / tiny / tf6pro-6[1].0.140.exe / Tiny Firewall Pro 6.0.msi / XSLTTransform.js < prev   
Encoding:
JavaScript  |  2004-07-20  |  4.2 KB  |  161 lines

  1. // Filters xml file with current assignment and transforms it with
  2. // XSLT transform
  3. function TransformXMLWithAssignment(xmlDoc, xslPath)
  4. {
  5.   var srcTree = new ActiveXObject("Msxml2.DOMDocument.4.0");
  6.   srcTree.async=false;
  7.   srcTree.load(xmlDoc); 
  8.  
  9.     // removes those rule which don't agree with assignment
  10.     srcTree = filterByAssignment(srcTree);
  11.  
  12.   var xsltTree= new ActiveXObject("Msxml2.DOMDocument.4.0");
  13.   xsltTree.async = false;
  14.   xsltTree.load(xslPath);
  15.  
  16.   return srcTree.transformNode(xsltTree);
  17.  
  18. }
  19.  
  20. function TransformXML(xmlDoc, xslPath)
  21. {
  22.     return TransformXMLWithParams(xmlDoc, xslPath)
  23. }
  24.  
  25. // Transforms XML file with xsl template.
  26. // This method also takes parameters from url and add them to xml file as follows:
  27. // <Document>
  28. //   ...
  29. //   ... content of xml ...
  30. //   ...
  31. //   <Params>
  32. //     <Param name="name1>value1<Param>
  33. //     <Param name="name2>value2<Param>
  34. //     ...
  35. //   </Params>
  36. // </Document>
  37. //
  38. // If params parameter is given, it is added to URL as additional parameters.
  39. function TransformXMLWithURLParams(xmlDoc, xslPath, params)
  40. {
  41.   // get URL parameters and call TransformXMLWithParams(xmlDoc, xslPath, params)
  42.   parString = document.location.href.split("?");
  43.     if (!params)
  44.         params = "";
  45.  
  46.   if (parString.length > 1 )
  47.   {
  48.         return TransformXMLWithParams(xmlDoc, xslPath, parString[1] + "&" + params);
  49.     }
  50.     else
  51.     {
  52.         return TransformXMLWithParams(xmlDoc, xslPath, params);
  53.     }
  54. }
  55.  
  56. // This function is the same as TransformXMLWithURLParams(xmlDoc, xslPath) with one exception.
  57. // Parameters are not taken from url but they are only included as an input parameter of this function.
  58. // Syntax of param string is the same as url params, e.g. param1=value1¶m2=value2&...
  59. function TransformXMLWithParams(xmlDoc, xslPath, params)
  60. {
  61.   var srcTree = new ActiveXObject("Msxml2.DOMDocument.4.0");
  62.   srcTree.async=false;
  63.   srcTree.load(xmlDoc); 
  64.  
  65.     if (params != null && params.length > 0)
  66.     {
  67.         // create Params tag as a child of Document
  68.         var nodeRoot = srcTree.selectSingleNode("Document");
  69.         var nodeParams = srcTree.createElement("Params");
  70.         nodeRoot.appendChild(nodeParams);
  71.  
  72.         // parse parameters 'params' and add them to Params tag
  73.  
  74.         // set of parameters
  75.         var pars = params.split("&");
  76.         for (var i = 0; i < pars.length; i++)
  77.         {
  78.             var paramParts = pars[i].split("=");
  79.     
  80.             // create Param tag
  81.             var paramTag = srcTree.createElement("Param");
  82.             paramTag.setAttribute("name", unescape(paramParts[0]));
  83.             paramTag.text = unescape(paramParts[1]);
  84.             nodeParams.appendChild(paramTag);
  85.         }
  86.     }
  87.  
  88.   var xsltTree= new ActiveXObject("Msxml2.DOMDocument.4.0");
  89.   xsltTree.async = false;
  90.   xsltTree.load(xslPath);
  91.  
  92.   return srcTree.transformNode(xsltTree);
  93. }
  94.  
  95. function filterByAssignment(srcTree)
  96. {
  97.     var rlNode = srcTree.selectSingleNode("SecDb/RuleList");
  98.  
  99.     var treeNode = null
  100.     if (rlNode && rlNode.hasChildNodes)
  101.         treeNode = rlNode.firstChild;
  102.     
  103.     var maxNo = 0;
  104.  
  105.     while (treeNode)
  106.     {
  107.         // ID of current rule
  108.         var ruleId = treeNode.attributes == null ? "" : treeNode.getAttribute("id");
  109.  
  110.         // Device rule
  111.         if (ruleId.substring(0, 2) == "DS")
  112.         {
  113.             // set max rule number
  114.             var ruleNo = ruleId.substring(2)*1;
  115.             if (ruleNo > maxNo)
  116.                 maxNo = ruleNo;
  117.  
  118.             var assgn = treeNode.getAttribute("filter");
  119.             if (!assgn)
  120.                 assgn = "";
  121.  
  122.             // check if assignment string consists only from "?" (?,?,?,...)
  123.             var anyAssgn = true;
  124.             var values = ctrlAsgnmt.Assignment.split(",");
  125.             for (var i = 0; i < values.length; i++)
  126.                 if (values[i] != "?")
  127.                     anyAssgn = false;
  128.  
  129.             // filter bad assignment rules
  130.             if ((!anyAssgn || ((assgn != "") && (assgn != "*"))) && (ctrlAsgnmt.Assignment != assgn))
  131.             {
  132.                 var remNode = treeNode;
  133.                 treeNode = treeNode.previousSibling;
  134.                 // remove this rule from srcTree
  135.                 rlNode.removeChild(remNode);
  136.             }
  137.         }
  138.  
  139.         /// get next rule
  140.         if (treeNode == null)
  141.             treeNode = rlNode.firstChild;
  142.         else
  143.             treeNode = treeNode.nextSibling;
  144.     }
  145.  
  146.     maxRuleID.value = maxNo;
  147.     return srcTree;
  148. }
  149.  
  150. // Returns object with ID 'objId'
  151. function getObj(objId)
  152. {
  153.   if (document.getElementById)
  154.     return document.getElementById(objId);
  155.   else if (document.all)
  156.     selects = document.all[objId];
  157.   else
  158.     return null;
  159. }
  160.  
  161.